package com.heatup.apt.common.dao;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Component;

import com.baomidou.mybatisplus.mapper.AutoMapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.heatup.apt.model.course.CourseSchedule;
import com.heatup.apt.model.order.OrderCoachPrivate;
import com.heatup.apt.model.order.OrderCompanyDetail;
import com.heatup.apt.model.order.OrderCompanyInfo;
import com.heatup.apt.model.order.OrderCourseDetailInfo;
import com.heatup.apt.model.order.OrderCourseInfoPwd;
import com.heatup.apt.model.course.CourseTime;
import com.heatup.apt.model.order.OrderFinished;
import com.heatup.apt.model.order.OrderInFoToTK;
import com.heatup.apt.model.order.OrderInfo;
import com.heatup.apt.model.order.OrderRefund;
import com.heatup.apt.model.order.OrderUserInfo;
import com.heatup.apt.model.vo.CasherResolveLog;
import com.heatup.apt.model.vo.MealListVO;

//import com.gorun.model.course.CourseReg;

@Component
public interface OrderInfoMapper extends AutoMapper<OrderInfo> {


    /**
     * 乐观锁更新不为空的值的订单
     *
     * @param record
     * @return
     */
    int updateByPrimaryKeyAndVersionSelective(OrderInfo record);


    /**
     * 修改订单版本号
     * OrderInfoMapper.updateOrderVersion()<BR>
     * <P>Author :  fangxiaowen </P>
     * <P>Date : 2016年8月26日 </P>
     *
     * @param params
     * @return
     */
    int updateOrderVersion(Map<Object, Object> params);

    /**
     * 获取订单信息
     * OrderInfoMapper.queryOrderInfoById()<BR>
     * <P>Author :  fangxiaowen </P>
     * <P>Date : 2016年9月2日 </P>
     *
     * @param id 主键ID
     * @return
     */
    OrderInfo queryOrderInfoById(Integer id);

    /**
     * 修改订单状态
     * UserInfoMapper.updatePayOrder()<BR>
     * <P>Author :  fangxiaowen </P>
     * <P>Date : 2016年8月26日 </P>
     *
     * @param map
     * @return
     */
    int updatePayOrder(Map<Object, Object> map);

    /**
     * 修改本次预约人数
     * OrderInfoMapper.updateCampCourseCount()<BR>
     * <P>Author :  fangxiaowen </P>
     * <P>Date : 2016年9月12日 </P>
     *
     * @param courseId 课程ID
     * @return
     */
    int updateCampCourseCount(Integer courseId);

    /**
     * 修改排队人数
     * OrderInfoMapper.updateCourseWaitCount()<BR>
     * <P>Author :  fangxiaowen </P>
     * <P>Date : 2016年9月12日 </P>
     *
     * @param courseId 课程ID
     * @return
     */
    int updateCourseWaitCount(Integer courseId);

    /**
     * 获取课程排队人数的最大顺序
     * OrderInfoMapper.queryMaxWaitNumber()<BR>
     * <P>Author :  fangxiaowen </P>
     * <P>Date : 2016年9月12日 </P>
     *
     * @param
     * @return
     */
    int queryMaxWaitNumber(Integer serviceId);

    /**
     * 获取当前订单的排队人数
     *
     * @return
     */
    int queryBeforeWaitNum(@Param("orderId") Integer orderId, @Param("serviceId") Integer serviceId);

    /**
     * 获取所有排队的人数
     *
     * @param
     * @return
     */
    int getOrderStatusAll(Map<Object, Object> map);

    /**
     * 获取获取我再等候人数的位置
     *
     * @param
     * @return
     */
    int getOrderStatusNumber(Map<Object, Object> map);

    /**
     * 获取团课订单数据
     *
     * @param map
     * @return
     */
    List<OrderInFoToTK> getOrderListByTK(Map<String, Object> map);

    /**
     * 获取团课总统计数据
     *
     * @param map
     * @return
     */
    OrderInFoToTK getOrderListCountByTK(Map<String, Object> map);


    /**
     * 查找 即将开始，预约排队 下面 不同serviceType 的订单个数（在我的预约那里显示 数字 用）
     *
     * @param order_status
     * @param order_type
     * @param user_id
     * @return
     */
/*    @Select({

    	"select count(*) from order_info o,service_price s,course_schedule cs where o.service_id= s.service_type and s.course_id = cs.course_id",
    	"and o.order_status=#{order_status}",
    	"and o.order_type=#{order_type}",
    	"and o.user_id=#{user_id}",
    	"and SYSDATE() < cs.start_time"
    })
    @ResultMap("BaseResultMap")
*/
    int selectCountByOrderType(@Param("order_status") int order_status, @Param("order_type") int order_type, @Param("user_id") int user_id);


    /**
     * 获取私教订单数据
     *
     * @param map
     * @return
     */
    List<OrderInFoToTK> getOrderListBySJ(Map<String, Object> map);

    /**
     * 创建退款订单
     *
     * @param refund
     * @return
     */
    int createdRefundOrder(OrderRefund refund);

    /**
     * 根据课程id查询课程计划列表
     *
     * @param map
     * @return
     */
    List<CourseSchedule> getCourseScheduleList(Map<String, Object> map);

    /**
     * 修改订单状态
     *
     * @param map
     * @return
     */
    int updateStatusOrder(Map<Object, Object> map);

    /**
     * 查询私教课程的课时编号
     *
     * @param id
     * @return
     */
    @Select({
            "select IFNULL(max(course_number),1)",
            "from course_reg",
            "where order_id = #{id,jdbcType=INTEGER}"
    })
    int getCourseNumber(Integer id);

//    /**
//     * 私教销课
//     *
//     * @param courseReg
//     * @return
//     */
//    int saveCourseReg(CourseReg courseReg);

    /**
     * 获取檬营课程列表信息
     *
     * @param map
     * @return
     */
    List<OrderInFoToTK> getOrderListByMY(Map<String, Object> map);

    /**
     * 获取自助健身课程列表信息
     *
     * @param map
     * @return
     */
    List<OrderInFoToTK> getOrderListByZZ(Map<String, Object> map);

    /**
     * 查询订单状态不是成功的退款订单
     *
     * @return
     */
    @Select({
            "select * from order_refund where refund_status <> 'success'",
    })
    List<OrderRefund> getOrderRefundList();

    @Update({
            "update order_refund",
            "set refund_status = #{refundStatus,jdbcType=VARCHAR},",
            "where id = #{id,jdbcType=INTEGER}"
    })
    int updateOrderRefund(OrderRefund orderRefund);

    /**
     * 查询第一个派对的订单
     *
     * @param map
     * @return
     */
    OrderInfo getFristWaitOrder(Map<Object, Object> map);

    int selectTeamCourseCount(@Param("order_status") int order_status, @Param("order_type") int order_type, @Param("user_id") int user_id);

    int selectSelfFitnessCount(@Param("order_status") int order_status, @Param("order_type") int order_type, @Param("user_id") int user_id);

    /**
     * 查询檬营计数
     *
     * @param order_status
     * @param order_type
     * @param user_id
     * @param campType
     * @return
     */
    int selectCamCourseCount(@Param("order_status") int order_status, @Param("order_type") int order_type, @Param("user_id") int user_id, @Param("camp_type") Integer campType);

    /**
     * 查询私教计数
     *
     * @param order_status
     * @param order_type
     * @param user_id
     * @return
     */
    int selectSecretCourseCount(@Param("order_status") int order_status, @Param("order_type") int order_type, @Param("user_id") int user_id);

    /**
     * 查询累计训练次数
     * OrderInfoMapper.queryAddUpCount()<BR>
     * <P>Author :  fangxiaowen </P>
     * <P>Date : 2016年10月18日 </P>
     *
     * @param params
     * @return
     */
    List<Integer> queryAddUpCount(Map<Object, Object> params);

    /**
     * 查询累计训练时间
     * OrderInfoMapper.queryAddUpTimeCount()<BR>
     * <P>Author :  fangxiaowen </P>
     * <P>Date : 2016年10月18日 </P>
     *
     * @param params
     * @return
     */
    List<Integer> queryAddUpTimeCount(Map<Object, Object> params);

    int checkTradeIdIsOK(String tradeId);

    int checkUserPwdIsOK(String userPwd);

    /**
     * 销课
     * OrderInfoMapper.updateCancelCourse()<BR>
     * <P>Author :  fangxiaowen </P>
     * <P>Date : 2016年10月21日 </P>
     *
     * @param map
     * @return
     */
    int updateCancelCourse(Map<Object, Object> map);

    /**
     * 查询是否有比当前排序更早的课未销
     * OrderInfoMapper.queryCourseSignLessNum()<BR>
     * <P>Author :  fangxiaowen </P>
     * <P>Date : 2016年10月21日 </P>
     *
     * @param map
     * @return
     */
    int queryCourseSignLessNum(Map<Object, Object> map);

    /**
     * 修改订单状态为已完成
     * OrderInfoMapper.updateOrderInfoStatus()<BR>
     * <P>Author :  fangxiaowen </P>
     * <P>Date : 2016年10月25日 </P>
     *
     * @param map
     * @return
     */
    int updateOrderInfoStatus(Map<Object, Object> map);

    /**
     * 查询已销课的数量
     * OrderInfoMapper.queryCourseSignCount()<BR>
     * <P>Author :  fangxiaowen </P>
     * <P>Date : 2016年10月25日 </P>
     *
     * @param map
     * @return
     */
    int queryCourseSignCount(Map<Object, Object> map);

    /**
     * 查询我的预约-即将开始-檬营订单列表
     *
     * @param userId
     * @param campType
     * @return
     */
    List<OrderInfo> queryCampCourseOrderList(@Param("userId") int userId, @Param("campType") Integer campType);

    /**
     * 查询我的预约-即将开始-私教订单列表
     *
     * @param userId
     * @param order_status
     * @return
     */
    List<OrderInfo> querySecretCourseOrderList(@Param("userId") int userId, @Param("order_status") Integer order_status);

    /**
     * 修改订单付款状态为 付款中
     * OrderInfoMapper.updateOrderPayStatus()<BR>
     * <P>Author :  fangxiaowen </P>
     * <P>Date : 2016年10月24日 </P>
     *
     * @param orderId 订单ID
     * @return
     */
    int updateOrderPayStatus(Integer orderId);

    /**
     * 根据密码 查询当天的 团/私/檬营 课程/自助 订单
     *
     * @param cardN 用户门禁密码
     * @return
     */
    OrderCourseInfoPwd queryOrderInfoByNowDayPwd(String cardN);

    /**
     * 根据密码 查询当天的 自助健身 订单
     *
     * @param cardN
     * @return
     */
    OrderCourseInfoPwd querySelfWorkOutInfoByNowDayPwd(String cardN);


    /**
     * 根据订单号查询退款
     *
     * @param orderId
     * @return
     */
    int queryOrderRefundByOrderId(int orderId);


    /**
     * 更新用户门禁密码使用计数
     *
     * @param id
     * @return
     */
    @Update({
            "update order_info ",
            "set user_pwd_use_count = user_pwd_use_count+1",
            "where id = #{id}"
    })
    int updateDoorAccessDevicePWDUsedCountByOrderId(Integer id);

    /**
     * 查询檬营排队订单(已过截止时间需退款)
     *
     * @return
     */

    List<OrderCourseDetailInfo> queryCampCourseWaitList();


    /**
     * 根据订单号查询订单
     *
     * @param number
     * @return
     */
    OrderInfo queryOrderInfoByNumber(String number);

    /**
     * 查询所有的支付中的订单
     *
     * @return
     */
    List<OrderInfo> queryOrderInfoByPayStatusIs3();

    /**
     * 查询所有已完成的订单
     *
     * @return
     */
    List<OrderInfo> queryOrderInfoBySelfFitness(Integer userId);

    /**
     * 查询用户已完成课时计数 /分钟
     *
     * @param UserId
     * @return
     */
    OrderFinished queryUserFinishedCourseCount(@Param("userId") Integer UserId);

    /**
     * 查询教练已完成课时计数/ 分钟
     *
     * @param mobile
     * @return
     */
    OrderFinished queryCoachFinishedCourseCount(String mobile);

    /**
     * 查询用户团课订单信息
     *
     * @param userId
     * @param bookStatus
     * @param serviceType
     * @return
     */
    List<OrderInfo> queryMyBookTeamCourseBy(@Param("userId") Integer userId, @Param("bookStatus") String bookStatus, @Param("serviceType") int serviceType);

    /**
     * 查询自助健身订单信息
     *
     * @param userId
     * @param bookStatus
     * @param serviceType
     * @return
     */
    List<OrderInfo> queryMyBookSelffitBy(@Param("userId") Integer userId, @Param("bookStatus") String bookStatus, @Param("serviceType") int serviceType);

    /**
     * 查询会员订单列表
     *
     * @param map
     * @return
     */
    List<Map<String, Object>> getOrderListByHY(Map<String, Object> map);

    /**
     * 查询已完成的订单数量
     *
     * @param userId
     * @return
     */
    int queryOrderStatusIsFinish(int userId);

    /**
     * 查询用户是否有购买此订单
     *
     * @param userId   用户ID
     * @param courseId 课程ID
     * @return
     */
    int queryOrderByUserIdAndCourseId(@Param("userId") Integer userId, @Param("courseId") Integer courseId);

    /**
     * 查询用户是否以VIP身份有购买此改课程
     *
     * @param userId   用户ID
     * @param courseId 课程ID
     * @return
     */
    int queryVipOrderByUserIdAndCourseId(@Param("userId") Integer userId, @Param("courseId") Integer courseId, @Param("isCompanyPay") Integer isCompanyPay);

    /**
     * 查询用户订单
     *
     * @param userId   用户ID
     * @param courseId 课程ID
     * @return 订单ID/订单类型
     */
    List<OrderUserInfo> queryOrderInfoByCourseIdAndUserId(@Param("userId") Integer userId, @Param("courseId") Integer courseId);

    /**
     * 查询企业消费流水列表
     *
     * @param queryMap 查询条件
     * @return 企业消费流水列表
     */
    List<OrderCompanyInfo> queryCompanyCostList(Map<String, Object> queryMap);

    /**
     * 查询企业消费流水总计
     *
     * @param queryMap 查询条件
     * @return 企业消费流水总计
     */
    int queryCompanyCostCount(Map<String, Object> queryMap);

    /**
     * 查询企业已完成订单列表
     *
     * @param queryMap 查询条件
     * @return 企业储值卡已完成订单
     */
    List<OrderCompanyDetail> queryCompanyOrderList(Page<OrderCompanyDetail> page, Map<String, Object> queryMap);


    /**
     * 查询企业储值账户下的企业员工已完成(含退款)订单列表
     *
     * @param queryMap 查询条件
     * @return 企业储值卡企业员工已完成(含退款)订单
     */
    List<OrderCompanyDetail> queryCompanyStaffOrderList(Page<OrderCompanyDetail> page, Map<String, Object> queryMap);


    /**
     * 根据用户自助健身开始时间查询是否有时间冲突的订单
     *
     * @param startTimeTemp 自助健身开始时间
     * @param storeId       门店 Id
     * @param userId        用户 Id
     * @return 订单
     */
    List<OrderInfo> queryOrderInfoByStartTime(@Param("startTime") Date startTimeTemp, @Param("storeId") Integer storeId, @Param("userId") Integer userId);

    /**
     * 用户是否预订过该课程
     *
     * @param userId   用户ID
     * @param courseId 课程ID
     * @return 订单ID/订单类型
     */
    Integer queryOrderByCourseIdAndUserId(@Param("userId") Integer userId, @Param("courseId") Integer courseId);

    /**
     * 用户是否以优惠价格预订过该课程
     *
     * @param userId   用户ID
     * @param courseId 课程ID
     * @return 订单ID/订单类型
     */
    Integer queryIsVipOrderByCourseIdAndUserId(@Param("userId") Integer userId, @Param("courseId") Integer courseId);

    /**
     * 查询用户订单明细
     *
     * @param map
     * @return
     */
    List<Map<String, Object>> quertyUserOrderInfoList(Map<String, Object> map);

    int createdRefundOrderList(List<OrderRefund> list);

    /**
     * 根据serviceId和用户id和订单类型查询订单列表
     *
     * @param serviceId
     * @param userId
     * @param orderType
     * @return
     */
    List<OrderInfo> quertOrderListByServiceIdAndUserIdAndOrderType(@Param("serviceId") Integer serviceId, @Param("userId") Integer userId, @Param("orderType") Integer orderType);

    /**
     * 根据用户 ID 查询用户当前时间内的会员价的自助健身订单
     *
     * @param userId   用户 ID
     * @param storeId  门店 ID
     * @param selfTime 预约时间
     * @return 会员自助订单
     */
    int queryOrderInfoBySelfTime(@Param("userId") Integer userId, @Param("storeId") int storeId, @Param("selfTime") Date selfTime);


    int createPayLogs(@Param("userId") int userId, @Param("serviceType") String serviceType, @Param("logs") String logs);

    /**
     * 查询用户是否已经下过私教限制购买次数的课程
     *
     * @param courseId 课程 ID
     * @param userId   用户 ID
     * @return 1已经购买 / 0 未购买
     */
    Integer queryOrderLimitByCourseIdAndUserId(@Param("courseId") Integer courseId, @Param("userId") Integer userId);

    /**
     * 查询用户当前已购买过限制购买次数的私教课程ID列表
     *
     * @param userId 用户 ID
     * @return 已购买的私教课程 ID列表
     */
    List<Integer> queryOrderLimitListByCourseIdAndUserId(@Param("userId") Integer userId);

    /**
     * 查询用户使用团课包月卡购买过该课程的数量
     *
     * @param map
     * @return
     */
    Integer queryTeamMonthlyOrderInfoCountByUser(Map<String, Object> map);

    /**
     * 查询当前课程开始日期上周用户购买的团课包月课旷课次数
     *
     * @param userId
     * @return
     */
    Integer queryKKCnUserMonthlyTeamOrderInfoLastWeek(@Param("userId") Integer userId, @Param("startDate") String startDate);

    /**
     * 查询当前课程开始日期前一周未完成的团课包月订单次数
     *
     * @param userId
     * @param startDate
     * @return
     */
    Integer queryUnCompletedTeamCourseCn(@Param("userId") Integer userId, @Param("startDate") String startDate);


    /**
     * 查询用户本周购买团课包月的课程数量
     *
     * @param userId
     * @return
     */
    Integer queryCnUserMonthlyTeamOrderInfoThisWeek(@Param("userId") Integer userId, @Param("startDate") String startDate);

    /**
     * 查询用户已完成的订单数量
     *
     * @param userId
     * @return
     */
    Integer queryUserOrderIsCompleted(Integer userId);

    /**
     * 根据服务Id查询用户非取消订单的数量
     *
     * @param userId    用户Id
     * @param serviceId 服务Id
     * @return
     */
    Integer queryUserNonCancellationOfOrderByServiceId(@Param("userId") Integer userId, @Param("serviceId") Integer serviceId);

    /**
     * 查询用户已取消订单
     *
     * @param userId 用户Id
     * @return
     */
    List<OrderInfo> queryUserCancelledOrderByUserId(@Param("userId") Integer userId);

    /**
     * 查询用户已支付未完成订单
     *
     * @param userId      用户Id
     * @param orderStatus 订单状态
     * @param orderType   订单类型
     * @return
     */
    List<OrderInfo> queryUserPaymentNotFinishOrder(@Param("userId") Integer userId, @Param("orderStatus") Integer orderStatus, @Param("orderType") Integer orderType);

    /**
     * 查询付款中订单
     *
     * @return
     */
    List<OrderInfo> queryInPaymentOrder();

    /**
     * 查询用户当前是否已有过私教/体验/体测课订单 如有则返回对应的教练 ID
     *
     * @return coachId 返回对应的教练 ID
     * @author blank 2017/8/1 下午3:30
     */
    Integer queryLastOrderCoachId(Integer userId);

    /**
     * 查询订单对应的教练 ID
     *
     * @author blank 2017/8/1 下午5:45
     */
    Integer queryOrderCoachId(Integer orderId);

    /**
     * 获取私教预约订单
     *
     * @param userId
     * @return
     */
    List<Map<String, Object>> queryPrivateBespeakByUserId(Integer userId);

    /**
     * 根据订单
     * 状态、类型、用户、上课教练 查询当天订单数量
     *
     * @param userId
     * @param coachId
     * @param orderStatus
     * @param orderType
     * @param storeId
     * @return
     */
	Integer queryOrderCountByCoachIdAndUserIdAndOrderTypeAndOrderStatusToDay(@Param("userId") Integer userId,
			@Param("coachId") Integer coachId, @Param("orderStatus") Integer orderStatus,
			@Param("orderType") Integer orderType, @Param("storeId") Integer storeId);


    /**
     * 教练端获取私教体测授课订单列表分页
     * privateType = 2 type = 0
     *
     * @author blank 2017/8/5 上午11:09
     */
    List<OrderCoachPrivate> queryCoachPrivateBodyExaminationOrderList(Map<String, Object> paramsMap);

    /**
     * 教练端获取私教体测授课订单列表总计
     * privateType = 2 type = 0
     *
     * @author blank 2017/8/4 下午5:04
     */
    int queryCoachPrivateBodyExaminationOrderCount(Map<String, Object> paramsMap);

    /**
     * 教练端获取私教体测记录订单列表分页
     * privateType = 2 type = 1
     *
     * @author blank 2017/8/5 上午11:09
     */
    List<OrderCoachPrivate> queryCoachPrivateBodyExaminationOrderHistoryList(Map<String, Object> paramsMap);

    /**
     * 教练端获取私教体测记录订单总计
     * privateType = 2 type = 1
     *
     * @author blank 2017/8/4 下午5:04
     */
    int queryCoachPrivateBodyExaminationOrderHistoryCount(Map<String, Object> paramsMap);

    /**
     * 教练端获取私教体验授课订单列表分页
     * privateType = 3 type = 0
     *
     * @author blank 2017/8/5 上午11:35
     */
    List<OrderCoachPrivate> queryCoachPrivateExperienceOrderList(Map<String, Object> paramsMap);

    /**
     * 教练端获取私教体测授课订单总计
     * privateType = 3 type = 0
     *
     * @author blank 2017/8/5 上午11:36
     */
    int queryCoachPrivateExperienceOrderCount(Map<String, Object> paramsMap);

    /**
     * 教练端获取私教体验记录订单列表分页
     * privateType = 3 type = 1
     *
     * @author blank 2017/8/5 上午11:35
     */
    List<OrderCoachPrivate> queryCoachPrivateExperienceOrderHistoryList(Map<String, Object> paramsMap);

    /**
     * 教练端获取私教体测记录订单总计
     * privateType = 3 type = 1
     *
     * @author blank 2017/8/5 上午11:36
     */
    int queryCoachPrivateExperienceOrderHistoryCount(Map<String, Object> paramsMap);

    /**
     * 教练端获取私教咨询订单列表分页
     * privateType = 4
     *
     * @author blank 2017/8/4 下午5:04
     */
    List<OrderCoachPrivate> queryCoachPrivateConsultOrderList(Map<String, Object> paramsMap);

    /**
     * 教练端获取私教咨询订单列表总计
     * privateType = 4
     *
     * @author blank 2017/8/4 下午5:04
     */
    int queryCoachPrivateConsultOrderCount(Map<String, Object> paramsMap);


    /**
     * 私教体验和体测订单查询
     *
     * @param param
     * @return
     */
    List<OrderInFoToTK> querySeAndPeOrderList(Map<String, Object> param);

    /**
     * 私教体验和体测订单统计查询
     *
     * @param param
     * @return
     */
    OrderInFoToTK querySeAndPeOrderCount(Map<String, Object> param);

    /**
     * 查询私教预约订单
     *
     * @param param
     * @return
     */
    List<OrderInFoToTK> queryPrivateBespeakOrderList(Map<String, Object> param);

    /**
     * 获取私教预约订单数量
     *
     * @param param
     * @return
     */
    Integer queryPrivateBespeakOrderCount(Map<String, Object> param);

    /**
     * 获取私教订单数量
     *
     * @param param
     * @return
     */
    OrderInFoToTK queryPersonaOrderCount(Map<String, Object> param);

    /**
     * 获取檬营订单数量
     *
     * @param param
     * @return
     */
    OrderInFoToTK queryFunCampOrderCount(Map<String, Object> param);

    /**
     * 获取檬营订单数量
     *
     * @param param
     * @return
     */
    OrderInFoToTK querySelfOrderCount(Map<String, Object> param);

    /**
     * 查询私教体测单日订单是否能够继续下单
     *
     * @return true 可以继续 false 不可继续
     * @author blank 2017/8/24 下午5:03
     */
    Boolean queryPrivateBodyExaminationOrderMaxLimitByToDay();

    /**
     * 查询私教体验单日订单是否可以继续下单
     *
     * @return true 可以继续 false 不可继续
     * @author blank 2017/8/24下午5:03
     */
    Boolean queryPrivateExperienceOrderMaxLimitByToDay();

    /**
     * 查询私教体测单日免费订单剩余量
     *
     * @return 私教体测单日免费订单剩余量
     * @author blank 2017/8/24 下午6:18
     */
    Integer queryPrivateBodyExaminationOrderLeftCountByToDay();

    /**
     * 查询私教体验单日免费订单剩余量
     *
     * @return 私教体验单日免费订单剩余量
     * @author blank 2017/8/24 下午6:19
     */
    Integer queryPrivateExperienceOrderLeftCountByToDay();

    Map<String, Object> queryVipOrderCount(Map<String, Object> parmaMap);

    /**
     * 获取用户餐券总和
     */
    int queryUserMealCount(@Param("userId") Integer userId);

    /**
     * 获取累计消费餐券总和
     */
    MealListVO queryMealDetailCount(@Param("userId") Integer userId);

    /**
     * 获取消费餐券记录
     */
    List<MealListVO> queryMealDetail(Map<String, Integer> param);

    /**
     * 根据订单id查询用餐订单详情
     */
    MealListVO queryMealOrderDetail(@Param("orderId") Integer orderId);

    /**
     * 私教消费餐
     */
    List<MealListVO> queryTomrrowMealList(@Param("dateTime") String dateTime);

    /**
     * 私教餐汇总
     */
    MealListVO queryTomrrowMealSum(@Param("dateTime") String dateTime);

    /**
     * 团课汇总
     */
    List<MealListVO> queryTomrrowTeamMealList(@Param("dateTime") String dateTime);

    /**
     * 团课人数汇总
     */
    int queryAllTeamPersonByDay(@Param("dateTime") String dateTime);

    /**
     * 根据订单 ID 查询上课时间
     *
     * @param orderId   订单 ID
     * @return 课程开始时间 如果是檬营只返回 1正在上课 2已结束 如果私教不返回时间 团课/自助正常返回时间
     */
     CourseTime queryCourseStartTimeByOrderId(@Param("orderId") Integer orderId);

     
     /**
      *  根据收银员id查询对应收银员的收款记录 
      *    @param casherId
 	  * @param dateTime
 	  * @return
      */
 	List<CasherResolveLog> queryCasherLog(@Param("casherId") Integer casherId, @Param("dateTime") String dateTime);
 	/**
 	 *  根据收银员id查询对应收银员的收款统计
 	 * @param casherId
 	 * @param dateTime
 	 * @return
 	 */
 	CasherResolveLog queryCasherSumMoney(@Param("casherId") Integer casherId, @Param("dateTime") String dateTime);
 	
 	/**
 	 * 1 有 0 没有 
 	 * 仅限于 团课 私教 檬营 三种课程类型的订单
 	 * @param courseId
 	 * @param userId
 	 * @param orderType
 	 * @return
 	 */
 	Integer checkUserIsHasThisCourseOrderByCourseIdAndUserIdAndOrderType(@Param("courseId") Integer courseId, @Param("userId") Integer userId, @Param("orderType") Integer orderType);
 	
 	
}